importPackage(Packages.java.io);
importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.RepoUtils.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.ix.ServiceBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.GetNamespacedConfigs" });
/**
* Returns merged Timed Event Configuration Files which are stored in Business Solutions configuration Folders
*
*
* @author ELO Digital Office GmbH
* @version 1.05.000
*
* @eloix
* @requires sol.common.Config
* @requires sol.common.RepoUtils
* @requires sol.common.Template
* @requires sol.common.ix.ServiceBase
*/
sol.define("sol.common.ix.services.GetNamespacedConfigs", {
extend: "sol.common.ix.ServiceBase",
/**
* @since 1.05.000
* @cfg {String[]} paths (optional) an array of relative paths inside the 'Business Solutions' (or its 'Custom') folders or even an objId. The configs will be loaded composed.
*/
/**
* @cfg {Boolean} [allSolutions=false] (optional) If `true` all configurations with path /Business Solutions/{{solution}}/Configuration/timedEvent.config will be added
*/
utils: {
removeDuplicats: function (arr) {
return Object.keys(
arr.reduce(function (acc, path) {
acc[path] = true;
return acc;
}, {})
);
}
},
initialize: function (config) {
var me = this;
if (!config.paths && !config.allSolutions) {
throw new Error("InitializationException: either 'paths' has to be defined or allSolutions has to be true");
}
me.$super("sol.common.ix.ServiceBase", "initialize", [config]);
},
getBusinessSolutionBasePath: function () {
return sol.common.RepoUtils.resolveSpecialFolder("{{bsFolderPath}}");
},
getBusinessSolutionBaseFolder: function () {
var me = this;
return sol.common.RepoUtils.findChildren(
sol.common.RepoUtils.getObjId(me.getBusinessSolutionBasePath()),
{
includeFolders: true,
includeDocuments: false
},
ixConnectAdmin
);
},
getBusinessSolutionBaseFolderNames: function () {
var me = this;
return (me.getBusinessSolutionBaseFolder() || [])
.map(function (sord) {
return sord.name;
})
.filter(function (name) {
return !!name;
});
},
getAllSolutionsPaths: function () {
var me = this;
return (me.getBusinessSolutionBaseFolderNames() || [])
.map(function (name) {
return "/" + name + "/Configuration/timedevent.config";
});
},
filterInvalidPaths: function (path) {
return path.indexOf("[") === -1;
},
getComposedConfig: function (path) {
return { path: path, config: sol.create("sol.common.Config", { compose: path }).config };
},
isEmpty: function (configContainer) {
return !sol.common.ObjectUtils.isEmpty(configContainer.config);
},
getConfigs: function (configContainer) {
return {
path: configContainer.path,
namespace: (configContainer.config || {}).namespace,
configs: (configContainer.config || {}).configs
};
},
checkNamespace: function (config) {
return !!(config || {}).namespace;
},
groupByIdAndNamespace: function (acc, config) {
var configs = (config || {}).configs || {},
key,
element;
for (key in configs) {
if (configs.hasOwnProperty(key)) {
element = configs[key];
if (element.id) {
element.namespace = element.namespace || config.namespace;
element.path = element.path || config.path;
acc[element.namespace] = acc[element.namespace] || {};
acc[element.namespace][element.id] = acc[element.namespace][element.id]
? sol.common.ObjectUtils.mergeObjects(acc[config[key]], config)
: element;
}
}
}
return acc;
},
/**
* Downloads the given file content as string
* @return {Object}
*/
process: function () {
var me = this,
paths,
addSolutions,
preparedPaths;
// prepare
paths = me.paths
? Array.isArray(me.paths)
? me.paths
: [me.paths]
: [];
addSolutions = me.allSolutions || false;
preparedPaths = me.utils.removeDuplicats(
addSolutions
? paths.concat(me.getAllSolutionsPaths())
: paths
);
return preparedPaths
.filter(me.filterInvalidPaths)
.map(me.getComposedConfig)
.filter(me.isEmpty)
.map(me.getConfigs)
.filter(me.checkNamespace)
.reduce(me.groupByIdAndNamespace, {});
}
});
/**
* @member sol.common.ix.services.GetNamespacedConfigs
* @method RF_sol_common_service_GetNamespacedConfigs
* @since 1.05.000
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_service_GetNamespacedConfigs(ec, args) {
var params, service, result;
logger.enter("RF_sol_common_service_GetNamespacedConfigs", args);
params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args);
service = sol.create("sol.common.ix.services.GetNamespacedConfigs", params);
result = service.process();
logger.exit("RF_sol_common_service_GetNamespacedConfigs", result);
return sol.common.JsonUtils.stringifyAll(result);
}